﻿using System;

namespace octalforty.Syndication.Core
{
    /// <summary>
    /// Represents a single syndication feed, which contains a collection of
    /// <see cref="ISyndicationFeedItem"/>.
    /// <seealso cref="ISyndicationFeedItem"/>
    /// </summary>
    public interface ISyndicationFeed
    {
        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains a human-readable
        /// title for the <see cref="ISyndicationFeed"/>.
        /// </summary>
        /// <example>GoUpstate.com News Headlines</example>
        String Title
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains the URL
        /// of the website which corresponds to the <see cref="ISyndicationFeed"/>.
        /// </summary>
        String Link
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains a phrase or a sentence 
        /// describing the <see cref="ISyndicationFeed"/>.
        /// </summary>
        /// <example>
        /// The latest news from GoUpstate.com, a Spartanburg Herald-Journal Web site.
        /// </example>
        String Description
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains copyright notice 
        /// for content in the <see cref="ISyndicationFeed"/>.
        /// </summary>
        /// <example>Copyright 2002, Spartanburg Herald-Journal</example>
        String Copyright
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="IPerson"/> which represents a person responsible 
        /// for editorial content of the <see cref="ISyndicationFeed"/>.
        /// </summary>
        /// <example>George Matesky &lt;geo@herald.com&gt;</example>
        IPerson ManagingEditor
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="IPerson"/> which represents a person responsible for 
        /// technical issues relating to the feed.
        /// </summary>
        /// <example>Betty Guernsey &lt;betty@herald.com&gt;</example>
        IPerson WebMaster
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="IPerson"/> which represents a person
        /// who is the author of the <see cref="ISyndicationFeed"/>.
        /// </summary>
        IPerson Author
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="IPerson"/> which represents a person
        /// who is the contributor to the content of the <see cref="ISyndicationFeed"/>.
        /// </summary>
        IPerson Contributor
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="DateTime"/> which contains the date and time
        /// of initial creation or first availability of the <see cref="ISyndicationFeed"/>.
        /// </summary>
        DateTime? PublishedOn
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="DateTime"/> which indicates the date and time
        /// indicating the most recent instant in time when the <see cref="ISyndicationFeed"/> was modified 
        /// in a way the publisher considers significant.
        /// </summary>
        DateTime? UpdatedOn
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains a permanent, universally unique
        /// identifier for the <see cref="ISyndicationFeed"/>.
        /// </summary>
        String UniqueIdentifier
        { get; set; }

        /// <summary>
        /// Gets a reference to the <see cref="SyndicationFeedItemCollection"/> which contains
        /// all <see cref="ISyndicationFeedItem"/> for the current <see cref="ISyndicationFeed"/>.
        /// </summary>
        SyndicationFeedItemCollection Items
        { get; }
    }
}
